const fs = require('fs')
const cheerio = require('cheerio')
const path = require('path')
module.exports = class HTMLPlugin {
    constructor(options) {
        this.options = options
    }
    apply (compiler) {
        // 1. 注册钩子，afterEmit
        // 如果使用done，必须使用stats.compilitation.assets获取数据
        compiler.hooks.afterEmit.tap('HTMLPlugin', (compilation) => {
            // 2. 根据创建对象时传入的template属性来读取html模板
            let result = fs.readFileSync(this.options.template, 'utf-8')
            // 3. 使用工具分析html，推荐使用cheerip，可以直接使用jQuery API
            let $ = cheerio.load(result)
            // 这里是循环遍历生成的多个文件，但是如果有chunk是不需要循环的，一般来说只拿第一个就可以了
            Object.keys(compilation.assets).forEach(item =>{
                $(`<script src="${item}"></script>`).appendTo('body')
            })
            //  输出新生成的html文件，到dist目录
            
            fs.writeFileSync(path.join(process.cwd(), './dist/', this.options.filename), $.html())
        })
    }
}